#include <vector>
using namespace std;
void setZeroes(vector<vector<int>> &matrix) {
  int m = matrix.size();
  int n = matrix[0].size();
  // [0,0]位置的元素会被访问两次，需要一个单独的值记录行的情况
  int row_0_flag = 1;
  for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
      if (matrix[i][j] == 0) {
        // 设置行标记
        if (i != 0)
          matrix[i][0] = 0;
        else
          row_0_flag = 0;
        // 设置列标记
        matrix[0][j] = 0;
      }
    }
  }
  // 遍历行 保留第一行 后续还要使用
  for (int i = 1; i < m; i++) {
    if (matrix[i][0] == 0) {
      for (int j = 1; j < n; j++) {
        matrix[i][j] = 0;
      }
    }
  }

  for (int i = 0; i < n; i++) {
    if (matrix[0][i] == 0) {
      for (int j = 1; j < m; j++) {
        matrix[j][i] = 0;
      }
    }
  }
  // 处理第一行
  if (row_0_flag == 0) {
    for (int j = 0; j < n; j++) {
      matrix[0][j] = 0;
    }
  }
}